home *** CD-ROM | disk | FTP | other *** search
/ Network Support Library / RoseWare - Network Support Library.iso / apidev / shotbl.arc / WINDOW.C < prev    next >
Text File  |  1988-11-18  |  4KB  |  173 lines

  1. /*****************************************************************************
  2.  *
  3.  * Program Name:  VIDEO MODE/CURSOR/WINDOW ROUTINES
  4.  *
  5.  * Filename:      window.c
  6.  *
  7.  * Date Created:  November 18, 1988
  8.  *
  9.  * Version:          1.0
  10.  *
  11.  * Programmers:      Thomas Brough
  12.  *
  13.  * Files used:
  14.  *
  15.  * Date Modified: 
  16.  *
  17.  * Modifications: 
  18.  *
  19.  * Comments:
  20.  *
  21.  ****************************************************************************/
  22.  
  23.  
  24. #include <dos.h>
  25.  
  26. DrawWindow(upperLeftRow,upperLeftCol,lowerRightRow,lowerRightCol,destseg,attr)
  27. int upperLeftRow,upperLeftCol,lowerRightRow,lowerRightCol,destseg;
  28. char attr;
  29. {
  30.    struct SREGS segs;
  31.    char tempword[255];
  32.    int upperLeft,upperRight,lowerLeft,lowerRight,srcoff,srcseg,destoff,i=0;
  33.    unsigned int mode;
  34.  
  35.    segread(&segs);
  36.    srcseg = segs.ds;
  37.    srcoff = (int)&tempword[0];
  38.    upperLeft = ((upperLeftRow - 1) * 160) + ((upperLeftCol - 1) * 2);
  39.    upperRight = ((upperLeftRow - 1) * 160) + ((lowerRightCol - 1) * 2);
  40.    lowerLeft = ((lowerRightRow - 1) * 160) + ((upperLeftCol - 1) * 2);
  41.    lowerRight = ((lowerRightRow -1) * 160 ) + ((lowerRightCol - 1) * 2);
  42.    tempword[0] = 0xd5;
  43.    tempword[1] = attr;
  44.    movedata(srcseg,srcoff,destseg,upperLeft,2);            /* draw upper left corner */
  45.    tempword[0] = 0xb8;
  46.    tempword[1] = attr;
  47.    movedata(srcseg,srcoff,destseg,upperRight,2);           /* draw upper right corner */
  48.    tempword[0] = 0xd4;
  49.    tempword[1] = attr;
  50.    movedata(srcseg,srcoff,destseg,lowerLeft,2);            /* draw lower left corner */
  51.    tempword[0] = 0xbe;
  52.    tempword[1] = attr;
  53.    movedata(srcseg,srcoff,destseg,lowerRight,2);        /* draw lower right corner */
  54.    for(i=0;i < (upperRight-upperLeft-2);i += 2)
  55.      {
  56.        tempword[i] = 0xcd;
  57.        tempword[i+1] = attr;
  58.      }
  59.    movedata(srcseg,srcoff,destseg,upperLeft+2,(upperRight - upperLeft - 2) );        /*draw top of window */
  60.    movedata(srcseg,srcoff,destseg,lowerLeft+2,(upperRight - upperLeft - 2) );     /*draw bottom of window */
  61.    for(destoff=(upperLeft+160);destoff<lowerLeft;destoff=destoff+160)
  62.       {
  63.          tempword[0] = 0xb3;
  64.          tempword[1] = attr;
  65.          movedata(srcseg,srcoff,destseg,destoff,2);
  66.          movedata(srcseg,srcoff,destseg,destoff+upperRight-upperLeft,2);
  67.       }
  68. }
  69. int SetVideoSegmentAddress(mode,destseg)
  70. int mode,*destseg;
  71. {
  72.   switch (mode)
  73.      {
  74.         case 0:
  75.         case 1:
  76.         case 2:
  77.         case 3:
  78.         case 4:
  79.         case 5:
  80.         case 6: *destseg = 0xB800;
  81.                 break;
  82.         case 7: *destseg = 0xB000;
  83.                 break;
  84.         case 8:
  85.         case 9:
  86.         case 10:
  87.         case 11:
  88.         case 12:*destseg = 0xB800;
  89.                 break;
  90.         case 13:
  91.         case 14:
  92.         case 15:
  93.         case 16:*destseg = 0xA000;
  94.                 break;
  95.         default:*destseg = 0xB000;
  96.                 break;
  97.      }
  98. }
  99. int GetVideoMode()
  100. {
  101.    unsigned int mode;
  102.    union REGS inr,outr;
  103.  
  104.    inr.h.ah = 0x0F;
  105.    int86(0x10,&inr,&outr);
  106.    mode = outr.h.al;
  107.    return(mode);
  108. }
  109. int PrintStringAttr(string,attr,destoff,destseg)
  110. char string[];
  111. int *destseg,*destoff;
  112. int *attr;
  113. {
  114.    int srcseg,srcoff,i=0,j=0;
  115.    char tempword[255];
  116.    struct SREGS segs;
  117.  
  118.    segread(&segs);
  119.    srcseg = segs.ds;
  120.    srcoff = (int)&tempword[0];
  121.    for (i=0;i < (strlen(string) * 2);i += 2)
  122.       tempword[i] = string[j++];
  123.    for (i=1;i < (strlen(string) * 2);i += 2)
  124.       tempword[i] = (char)attr;
  125.   movedata(srcseg,srcoff,destseg,destoff,(strlen(string)*2));
  126. }
  127.  
  128. int PrintCharAttr(character,attr,destoff,destseg)
  129. unsigned char *character;
  130. int *destseg,*destoff;
  131. int *attr;
  132. {
  133.    int srcseg,srcoff;
  134.    char tempword[2];
  135.    struct SREGS segs;
  136.  
  137.    segread(&segs);
  138.    srcseg = segs.ds;
  139.    srcoff = (int)&tempword[0];
  140.    tempword[0] = *character+48;
  141.    tempword[1] = (char)attr;
  142.   movedata(srcseg,srcoff,destseg,destoff,2);
  143. }
  144.  
  145. RemoveCursor()
  146. {
  147.     union REGS inregs,outregs;
  148.  
  149.     inregs.h.ch = 32;
  150.     inregs.h.ah = 1;
  151.     int86(16,&inregs,&outregs);
  152. }
  153. RestoreCursor( mode )
  154. int    mode;
  155. {
  156.     union REGS inregs,outregs;
  157.     if ( mode )
  158.     {
  159.         inregs.h.ch = 6;    /* for color display */
  160.         inregs.h.cl = 7;
  161.     }
  162.     else
  163.     {
  164.         inregs.h.ch = 11;    /* for monochrome display */
  165.         inregs.h.cl = 13;
  166.     }
  167.     inregs.h.ah = 1;
  168.     int86(16,&inregs,&outregs);
  169. }
  170.  
  171.  
  172.  
  173.